/**
 * BrandBigData.com Inc. Copyright (c) 2018 All Rights Reserved.
 */
package com.qibao.toolkit.dao;

import org.springframework.data.repository.NoRepositoryBean;

import java.io.Serializable;

/**
 * 在多租户环境下更新实体属性，where条件中包含分库分表的key
 *
 * @author wangcong
 * @version $Id: MultiTenantRepository.java, v0.1 2018/3/21 14:16 wangcong Exp $$
 */
@NoRepositoryBean
public interface UpdateJpaRepository<T, ID extends Serializable, Condition extends NameValuePair> {

    /**
     * 分库分表的键与主键不同时使用该方法;当使用主键分库分表时，参数key可以不用写
     *
     * @param entity     待更新的实体
     * @param id         主键
     * @param conditions 分库分表键
     * @return 返回null当且仅当更新失败;否则返回更新后的实体
     */
    <S extends T> S updateData(S entity, ID id, Condition... conditions);


    /**
     * 保存实体，该方法区别于JPA save() 方法，在保存时不去判断实体是否存在，不去使用主键查询实体. 仅构造insert语句执行。
     *
     * @param entity 待更新的实体
     * @return 返回null当且仅当更新失败;否则返回更新后的实体
     */
    <S extends T> S insertData(S entity);


}
